package com.dabai.iot.core.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dabai.iot.core.dto.ProductQuery;
import com.dabai.iot.core.entity.ProductEntity;
import com.dabai.iot.core.vo.ProductSelectVO;
import com.dabai.iot.core.vo.ProductVO;
import lombok.NonNull;

import java.util.List;
import java.util.Map;

/**
 * 产品 Service 接口
 *
 * @author kev1n
 */
public interface IProductService extends IService<ProductEntity> {

    /**
     * 新增
     */
    boolean addProduct(ProductEntity product);

    /**
     * 修改
     */
    boolean updateProduct(ProductEntity product);

    /**
     * 删除
     */
    boolean removeProduct(Long productId);

    /**
     * 产品详情
     */
    ProductVO detailById(@NonNull Long productId);

    /**
     * 产品列表分页
     */
    IPage<ProductEntity> getProductPage(IPage<ProductEntity> page, ProductQuery productQuery);

    /**
     * 产品下拉数据源
     */
    List<ProductSelectVO> select(String productName);

    /**
     * 更新产品物模型Tsl
     */
    boolean updateProductTsl(Long productId);

    /**
     * 根据主键 id 获取实体缓存
     */
    ProductEntity getProductCacheById(@NonNull Long productId);

    /**
     * 根据产品 key 获取实体缓存
     *
     * @param productKey 产品Key
     */
    ProductEntity getProductCacheByPk(@NonNull String productKey);

    /**
     * 查看上报示例
     */
    Map<String, String> getTSLExample(String productKey, String deviceSn);

}
